/**
中间件是指在软件架构中，位于操作系统与应用程序之间的一层软件，主要用于支持和简化应用程序的开发和运行。以下是对中间件的认识和总结：

1. 定义与功能：
   - 中间件是一种软件层，提供了应用程序之间的通信和数据管理功能。
   - 它可以处理不同应用程序之间的交互，使得开发者无需关注底层的实现细节。

2. 类型：
   - 消息中间件：如RabbitMQ、Kafka，主要用于异步消息传递。
   - 数据库中间件：如MyBatis，简化数据库操作。
   - Web中间件：如Tomcat、Nginx，处理HTTP请求和响应。
   - 应用服务器：如JBoss、WebLogic，提供企业级应用的运行环境。

3. 优点：
   - 解耦：通过中间件，各个应用模块可以相对独立地开发和部署。
   - 可扩展性：中间件可以支持系统的横向扩展，处理更多的请求。
   - 简化开发：提供通用的功能和服务，减少重复开发的工作。

4. 应用场景：
   - 在微服务架构中，中间件用于服务之间的通信。
   - 在大数据处理和实时数据流中，消息中间件用于数据的传输和处理。

5. 挑战：
   - 中间件的引入可能会增加系统的复杂性。
   - 需要对中间件进行监控和管理，以确保系统的稳定性和性能。

总结来说，中间件在现代软件开发中扮演了重要的角色，能够有效地提升系统的灵活性和可维护性。在选择和使用中间件时，需要根据具体的业务需求和技术栈进行合理的评估和决策。
 */
const express = require("express");

const app = express();

// 给express创建的app传入一个回调函数
// 传入的这个回调函数就称之为是中间件(middleware)
// app.post('/login', 回调函数 => 中间件)
app.post("/login", (req, res, next) => {
  // 1.中间件中可以执行任意代码
  console.log("first middleware exec~");
  // 打印
  // 查询数据
  // 判断逻辑

  // 2.在中间件中修改req/res对象
  req.age = 20;

  // 3.可以在中间件中结束响应周期
  // res.json({ message: "登录成功, 欢迎回来", code: 0 })

  // 4.调用next()函数，将控制权交给下一个中间件
  next();
});

app.use((req, res, next) => {
  console.log("second middleware exec~");
  res.end("hello middleware~");
});

app.listen(9000, () => {
  console.log("服务器启动成功~");
});
